home *** CD-ROM | disk | FTP | other *** search
- ON ERROR GOTO TRAP
- '
- ' Prog Name = CREATE.BAS
- ' Run String = CREATE <filename>
- ' Author = Douglas Welch
- Version$ = "1.1"
- ' Date = December 16, 1987
- '
- ' Run Name Date Who Ver# Description/Mod's
- ' ---------- ------ --- ---- ----------------------------------
- ' CREATE 871221 DEW 1.0 Create DBF Files directly
- ' CREATE 871221 DEW 1.1 Add support for MEMO Fields and Files
- '
- ' Create DBASE III+ / Foxbase+ (tm) DBF files directly
- '
- ' -- Variables --
- '
- ' INFILE$ - Name of Input File
- ' COMMAND$ - Command Line Arguments
- ' DBFNAME$ - Name of DBF to be created
- ' MEMO$ - Are there any memo fields (Y/N)
- ' SIZE$ - Total of Field Characters
- ' NUMFLD$ - Number of Fields
- ' DATE$ - Current Date
- ' FDNAME$() - FIELDNAME
- ' TYPE$() - FIELD TYPE
- ' WID() - FIELD WIDTH
- ' DEC() - DECIMAL NUMBER
- '
- ' --- Data File Structure ---
- '
- ' Name of Database to be created
- ' MEMO Fields (Y/N)
- ' Total Character Count of DBF File
- ' Number of Fields in DBF File
- ' Field Name, Field Type, Field Width, Decimal Number
- ' etc...
- '========================================================
- '
- ' Dimesion the arrays to hold field data
- DIM FDNAME$(30), TYPE$(30)
- DIM WID%(30), DEC%(30)
-
- ' Clear the screen
- CLS
- ' Header
- PRINT "dBase DBF File Creation Utility Version "+ VERSION$
- PRINT "(C) Douglas E. Welch 1987"
- PRINT "-----------------------------------"
- PRINT
-
- ' If ARG is given then do not prompt
- IF COMMAND$ = "" THEN
- LINE INPUT "Input file : ", INFILE$
- IF INFILE$ = "" THEN GOTO QUIT
- ELSE
- INFILE$ = COMMAND$
- END IF
-
- ' Open Files
- OPEN INFILE$ FOR INPUT AS #1
-
- ' Read in the file until file is empty
- DO WHILE NOT EOF(1)
- ' Get Header Information
- LINE INPUT #1, DBFNAME$
- LINE INPUT #1, MEMO$
- LINE INPUT #1, SIZE$
- LINE INPUT #1, NUMFLD$
- ' Read in Field info
- FOR COUNT% = 1 TO VAL(NUMFLD$)
- INPUT#1,FDNAME$(COUNT%),TYPE$(COUNT%),WID%(COUNT%),DEC%(COUNT%)
- ' Pad Out Field Name with nulls
- SHORT = 11 - LEN(FDNAME$(COUNT%))
- FDNAME$(COUNT%) = FDNAME$(COUNT%) + STRING$(SHORT,CHR$(0))
- ' Debug
- ' PRINT FDNAME$(COUNT%),TYPE$(COUNT%),WID%(COUNT%),DEC%(COUNT%)
- NEXT COUNT%
-
- ' Do some data type conversion
- SIZE = VAL(SIZE$)
- YY = VAL(MID$(DATE$,9,2))
- DD = VAL(MID$(DATE$,4,2))
- MM = VAL(MID$(DATE$,1,2))
-
- PRINT
- PRINT "Creating "; DBFNAME$ ; " as dBase III+ file...";
-
- ' If there is a memo field then create the memo file
- IF MEMO$ = "Y" THEN
- TEMP$ = LEFT$(DBFNAME$,LEN(DBFNAME$)-3)
- OPEN TEMP$+"DBT" FOR BINARY AS #3
- CLOSE #3
- END IF
-
- ' Open output file
- OPEN DBFNAME$ FOR BINARY AS #2
-
- ' Insert header in the file
- IF MEMO$ = "Y" THEN
- PUT$ #2, CHR$(131)
- ELSE
- PUT$ #2, CHR$(3)
-
- END IF
-
- PUT$ #2, CHR$(YY)+CHR$(MM)+CHR$(DD)+CHR$(0)+CHR$(0)+CHR$(0)+CHR$(0)
- PUT$ #2, CHR$(193)+CHR$(0)+CHR$(SIZE)+CHR$(0)+CHR$(0)+CHR$(0)+CHR$(0)+CHR$(0)
-
- ' Insert 16 bytes of nulls
- FOR I = 1 TO 16:PUT$ #2, CHR$(0):NEXT I
-
- ' Insert Fields into output field
- FOR I = 1 TO VAL(NUMFLD$)
- PUT$ #2,FDNAME$(I)+TYPE$(I)+CHR$(0)+CHR$(0)+CHR$(0)+CHR$(0)
- PUT$ #2,CHR$(WID%(I))+CHR$(DEC%(I))
- FOR J = 1 TO 14
- PUT$ #2, CHR$(0)
- NEXT J
- NEXT I
-
- ' Insert End of Dbase info marker
- PUT$ #2, CHR$(13)
- PRINT "Done"
- ' Close the output files
- CLOSE #2
- WEND
-
- QUIT:
- CLOSE #1
- CLOSE #2
- PRINT
- PRINT "Done..."
- END
-
- TRAP:
- IF ERR = 53 THEN PRINT:PRINT "File not Found: "+INFILE$ : BEEP
- GOTO QUIT
- END